using System;
using System.Web.Mvc;
using SubsidiosBussinessLogic.DataAccess.Interfaces;
using SubsidiosBussinessLogic.DataAccess.Context;
using SubsidiosBussinessLogic.DataAccess.SqlServerRepository;
using SubsidiosBussinessLogic.Models;

namespace SubsidiosWebMvc.Controllers
{
    public class TipoFuncionarioController : Controller
    {
        private ITipoFuncionarioRepository Repository { get; set; }

        public TipoFuncionarioController()
            : this(new TipoFuncionarioRepository(DataContextFactory.GetContext()))
        {

        }

        public TipoFuncionarioController(ITipoFuncionarioRepository repository)
        {
            Repository = repository;
        }

        //
        // GET: /TipoFuncionario/

        public ActionResult Listar()
        {
            var tipoFuncionarios = Repository.GetTipoFuncionarios();
            return View("Listar", tipoFuncionarios);
        }

        //
        // GET: /TipoFuncionario/Details/5

        public ActionResult Detalles(int id)
        {
            var tipoFuncionario = Repository.FindSingle(t => t.TipoFuncionarioId == id);
            return View("Detalles", new TipoFuncionarioFormViewModel(tipoFuncionario));
        }

        //
        // GET: /TipoFuncionario/Create

        public ActionResult Crear()
        {
            var tipoFuncionario = Repository.CreateTipoFuncionario();
            return View("Crear", new TipoFuncionarioFormViewModel(tipoFuncionario));

        }

        //
        // POST: /TipoFuncionario/Create

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Crear(FormCollection collection)
        {
            var tipoFuncionario = Repository.CreateTipoFuncionario();
            try
            {
                // TODO: Add insert logic here
                UpdateModel(tipoFuncionario);
                Repository.SaveTipoFuncionario();
                return RedirectToAction("Detalles", new {id = tipoFuncionario.TipoFuncionarioId});
            }
            catch
            {
                return View(tipoFuncionario);
            }
        }

        //
        // GET: /TipoFuncionario/Edit/5

        public ActionResult Editar(int id)
        {
            var tipoFuncionario = Repository.FindSingle(t => t.TipoFuncionarioId == id);

            return View("Editar", new TipoFuncionarioFormViewModel(tipoFuncionario));
        }

        //
        // POST: /TipoFuncionario/Edit/5

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Editar(int id, FormCollection collection)
        {
            var tipoFuncionario = Repository.FindSingle(t => t.TipoFuncionarioId == id);

            try
            {
                // TODO: Add update logic here
                UpdateModel(tipoFuncionario);
                Repository.SaveTipoFuncionario();
                return RedirectToAction("Detalles", new { id = tipoFuncionario.TipoFuncionarioId });
            }
            catch
            {
                return View(tipoFuncionario);
            }
        }

        public ActionResult GetTipoFuncionarios()
        {
            var tipoFuncionarios = Repository.GetTipoFuncionarios();
            string result = "";
            foreach (var tipoFuncionario in tipoFuncionarios)
            {
                result += String.Format("{0}:{1};", tipoFuncionario.TipoFuncionarioId, tipoFuncionario.Descripcion);
            }
            return Content(result.TrimEnd(new char[] { ';' }));
        }

    }

      
}
